#include "Ordinary.h"
#include "HistoryBased.h"
#include "HistoryManager.h"
// #include "TextToPcm.h"
// #include "PcmToText.h"
// #include "OutputAndReceive.h"
#include "Tools.h"
#include "ListenAndSpeak.h"
#include "EmbedText.h"
#include "RAGSearch.h"

#include <vector>


#include <iostream>
#include <string.h>
#include <mutex>


#include <QApplication>
#include "ChatWindow.h"


using namespace std;


int main(int argc, char *argv[])
{

    QApplication app(argc, argv);

    ChatWindow window;
    window.show();

    return app.exec();
    //embedding

    // EmbedText emb;

    // emb.embed_str_data("你好！");

    // emb.embed_file_data("../utils/text.txt", "../utils/embedded_files/embedded_text.txt");
    // // emb.embed_file_data("../utils/headers.txt", "../utils/embedded_files/embedded_headers.txt");

    // RAGSearch ragsearch;

    // string rag_output;

    // vector<string> files;

    // rag_output = ragsearch.get_RAG_Handeled_Text("用户安装手册大致讲了什么内容", files);

    // for (string str : files) {
    //     cout << str << endl;
    // }

    // cout << rag_output << endl;
    
    // Ordinary client;

    // cout << client.chat_with_model(rag_output) << endl;

    //语音交互
    // ListenAndSpeak las;

    // string output_text = las.receive_in();

    // cout << output_text << endl;

    // Ordinary client;

    // string input = output_text;//output_text;
    // string respond;

    // cout << "---模型回复生成中---\n";
    // respond = client.chat_with_model(input); //这里直接获取模型返回的结果
    // cout << "---模型回复生成成功---\n" << "模型回复：\n" << respond << endl;

    // cout << "---开始转语音---\n";
    // las.speak_out(respond);
    // cout << "---转语音完成---\n";

   



    //新版本的模型对话方式
    // Ordinary *client = new Ordinary();

    // string input;
    // string respond;

    // std::cout << "输入聊天内容, 输入exit退出聊天: \n";

    // while (getline(std::cin, input)) // 使用 getline 读取整行输入
    // {
    //     if (input != "exit")
    //     {
    //         respond = client->chat_with_model(input); //这里直接获取模型返回的结果
    //         cout << "模型回复：" << respond << endl;
    //         std::cout << "输入聊天内容, 输入exit退出聊天: \n";
    //     }
    //     else
    //     {
    //         cout << "结束对话" << endl;
    //         break;
    //     }
    // }

    // delete client;


    // string history_file_path = "../conversations/default_history.json";

    // HistoryBased historyBased;
    // historyBased.set_record_path(history_file_path);
    // historyBased.init();

    // // HistoryBased *historyBased = new HistoryBased(history_file_path);

    // std::string input;
    // std::string respond;

    // std::cout << "输入聊天内容, 输入exit退出聊天: \n";

    // while (getline(std::cin, input)) // 使用 getline 读取整行输入
    // {
    //     if (input != "exit")
    //     {
    //         // respond = historyBased->chat_with_model(input);
    //         respond = historyBased.chat_with_model(input);
    //         cout << respond;

    //         std::cout << "输入聊天内容, 输入exit退出聊天: \n";
    //     }
    //     else
    //     {
    //         std::cout << "聊天结束 \n";
    //         break;
    //     }
    // }

    // delete historyBased;
        

    // TextToPcm ttp; 

    // std::string msg = "你叫什么名字"; //这个得是模型输出文本内容后才转语音的，所以前面得接收模型输出

    // string out_put_pcm_file_path = ttp.run_model(msg);
    // cout << "output path: " << out_put_pcm_file_path << endl;
    // cout << "pcm file output is ok \n";

    // OutputAndReceive oar0;

    // cout << "---录音开始---\n";

    // string end_message0 = oar0.receive_voice();
    // cout << end_message0 << endl;

    // cout << "---录音结束---\n";


    // PcmToText ptt;
    // string output_text;
    // cout << "---开始pcm文件识别---\n";
    // output_text =  ptt.get_model_response(); // pcm文件识别
    // cout << "---pcm 转 text 成功---\n";
    // cout << output_text << endl;

    // Ordinary *client = new Ordinary();

    // string input = output_text;//output_text;
    // string respond;

    // cout << "---模型回复生成中---\n";
    // respond = client->chat_with_model(input); //这里直接获取模型返回的结果
    // cout << "---模型回复生成成功---\n" << "模型回复：\n" << respond << endl;

    // TextToPcm ttp; 
    // cout << "---开始转语音---\n";
    // string output_message = ttp.run_model(respond); // 转语音
    // cout << "---文字转语音成功---\n";
    // cout << output_message << endl;

    // OutputAndReceive oar1;

    // string end_message1 = oar1.output_voice();

    // cout << "---output---\n";
    // cout << end_message1 << endl;




    // delete client;





    return 0;
}
